Bug 545875 – evo crashed when trying to print pages 6-7 of a 1 page
authorMarek Kasik <mkasik@redhat.com>
Thu, 21 Aug 2008 11:30:46 +0000 (11:30 +0000)
committerMarek Kašík <mkasik@src.gnome.org>
Thu, 21 Aug 2008 11:30:46 +0000 (11:30 +0000)
2008-08-21  Marek Kasik  <mkasik@redhat.com>

Bug 545875 – evo crashed when trying to print pages 6-7 of a 1 page
email

* gtk/gtkprintoperation.c: Clamp page ranges to correct ranges

svn path=/trunk/; revision=21177

ChangeLog
gtk/gtkprintoperation.c

index f0a74c187e68ebf8f0542245159bf15d9cd6a6d1..f7fc4b66208e733aa5b102b21fea4f035c9b4d80 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2008-08-21  Marek Kasik  <mkasik@redhat.com>
+
+       Bug 545875 – evo crashed when trying to print pages 6-7 of a 1 page
+       email
+
+       * gtk/gtkprintoperation.c: Clamp page ranges to correct ranges
+
 2008-08-21  Marek Kasik  <mkasik@redhat.com>
 
        * ChangeLog: changelog update for previous commit
index 78505c7fd7726ead36b33e53be957acec69e3da4..316698da296c3cda04d0215b4dc47162f26e8adf 100644 (file)
@@ -1926,6 +1926,46 @@ find_range (PrintPagesData *data)
     }
 }
 
+static void
+clamp_page_ranges (PrintPagesData *data)
+{
+  GtkPrintOperationPrivate *priv; 
+  gint                      num_of_correct_ranges;
+  gint                      i;
+
+  priv = data->op->priv;
+
+  num_of_correct_ranges = 0;
+
+  for (i = 0; i < data->num_ranges; i++)
+    if ((data->ranges[i].start >= 0) &&
+        (data->ranges[i].start < priv->nr_of_pages) &&
+        (data->ranges[i].end >= 0) &&
+        (data->ranges[i].end < priv->nr_of_pages))
+      {
+        data->ranges[num_of_correct_ranges] = data->ranges[i];
+        num_of_correct_ranges++;
+      }
+    else if ((data->ranges[i].start >= 0) &&
+             (data->ranges[i].start < priv->nr_of_pages) &&
+             (data->ranges[i].end >= priv->nr_of_pages))
+      {
+        data->ranges[i].end = priv->nr_of_pages - 1;
+        data->ranges[num_of_correct_ranges] = data->ranges[i];
+        num_of_correct_ranges++;
+      }
+    else if ((data->ranges[i].end >= 0) &&
+             (data->ranges[i].end < priv->nr_of_pages) &&
+             (data->ranges[i].start < 0))
+      {
+        data->ranges[i].start = 0;
+        data->ranges[num_of_correct_ranges] = data->ranges[i];
+        num_of_correct_ranges++;
+      }
+
+  data->num_ranges = num_of_correct_ranges;
+}
+
 static gboolean 
 increment_page_sequence (PrintPagesData *data)
 {
@@ -2139,6 +2179,8 @@ print_pages_idle (gpointer user_data)
          data->ranges[0].end = priv->nr_of_pages - 1;
        }
       
+      clamp_page_ranges (data);
+
       if (priv->manual_reverse)
        {
          data->range = data->num_ranges - 1;